/**
 * 支付相关API接口封装
 * 专门针对三个核心接口：getPayData、getSubscribe、createPayOrder
 */

import {
	post
} from '@/utils/request.js'

/**
 * 获取金币充值数据
 * API: https://api-test.xtv.media/api/pay/getPayData
 * @param {Object} params 公共参数
 * @param {Number} params.cid 渠道ID
 * @param {Number} params.pid 产品ID
 * @param {Number} params.version 版本号
 * @param {Number} params.ios 平台标识
 * @param {Number} params.rechargePackId 充值包ID
 * @param {String} params.token 用户token
 * @param {Number} params.uid 用户ID
 * @param {String} params.sign 签名
 * @param {Number} params.timestamp 时间戳
 * @param {String} params.lang 语言
 * @param {String} params.gmt 时区
 * @returns {Promise}
 */
export function getPayData(params = {}) {
	return post('/pay/getPayData', params, {
		throttle: true, // 启用节流，防止重复请求
		delay: 1000, // 2秒内只能请求一次
		loading: true, // 显示加载状态
		showError: true // 显示错误提示
	})
}

/**
 * 获取订阅数据
 * API: https://api-test.xtv.media/api/Pay/getSubscribe
 * @param {Object} params 公共参数
 * @returns {Promise}
 */
export function getSubscribe(params = {}) {
	return post('/Pay/getSubscribe', params, {
		throttle: true, // 启用节流，防止重复请求
		delay: 1000, // 2秒内只能请求一次
		loading: true, // 显示加载状态
		showError: true // 显示错误提示
	})
}

/**
 * 获取加油金币充值包
 * API: https://api-test.xtv.media/api/Pay/getSubscribe
 * @param {Object} params 公共参数
 * @returns {Promise}
 */
export function getSubscribeAddon(params = {}) {
	return post('/Pay/getSubscribeAddon', params, {
		throttle: true, // 启用节流，防止重复请求
		delay: 1000, // 2秒内只能请求一次
		loading: true, // 显示加载状态
		showError: true // 显示错误提示
	})
}
//订单详情
export function orderInfo(params={}){
	return post('/AppPayProduct/orderInfo', params, {
		throttle: true, // 启用节流，防止重复请求
		delay: 1000, // 2秒内只能请求一次
		loading: true, // 显示加载状态
		showError: true // 显示错误提示
	})
	// return http2.httpRequest({
	// 	url: 'AppPayProduct/orderInfo',
	// 	method: 'POST'
	// }, params)
}

// 获取隐私政策、用户详情、订阅详情
export function getArticleDetails(params={}){
	return post('/AppPayProduct/orderInfo', params, {
		throttle: true, // 启用节流，防止重复请求
		delay: 1000, // 2秒内只能请求一次
		loading: true, // 显示加载状态
		showError: true // 显示错误提示
	})
}
/**
 * 获取iOS产品列表
 * API: https://api-test.xtv.media/api/Pay/getIosProductList
 * @param {Object} params 公共参数
 * @returns {Promise}
 */
export function getIosProductList(params = {}) {
	return post('/Pay/getIosProductList', params, {
		throttle: true, // 启用节流，防止重复请求
		delay: 1000, // 1秒内只能请求一次
		loading: false, // 不显示加载状态
		showError: false // 不显示错误提示
	})
}

/**
 * 获取用户信息
 * API: https://api-test.xtv.media/api/User/UserCenter
 * @param {Object} params 公共参数
 * @returns {Promise}
 */
export function getUserInfo(params = {}) {
	return post('/User/UserCenter', params, {
		throttle: true, // 启用节流，防止重复请求
		delay: 1000, // 1秒内只能请求一次
		loading: false, // 不显示加载状态
		showError: true // 显示错误提示
	})
}

/**
 * 创建支付订单
 * API: https://api-test.xtv.media/api/pay/pay
 * @param {Object} data 支付数据
 * @param {String} data.type 支付类型 (coin/subscribe)
 * @param {String} data.planId 套餐ID
 * @param {Number} data.amount 金额
 * @param {Number} data.coins 金币数量 (仅金币充值时需要)
 * @param {String} data.paymentMethod 支付方式
 * @param {Number} data.cid 渠道ID
 * @param {Number} data.pid 产品ID
 * @param {Number} data.version 版本号
 * @param {Number} data.ios 平台标识
 * @param {Number} data.rechargePackId 充值包ID
 * @param {String} data.token 用户token
 * @param {Number} data.uid 用户ID
 * @param {String} data.sign 签名
 * @param {Number} data.timestamp 时间戳
 * @param {String} data.lang 语言
 * @param {String} data.gmt 时区
 * @returns {Promise}
 */
export function createPayOrder(data = {}) {
	return post('/pay/pay', data, {
		debounce: true, // 启用防抖，防止重复提交
		delay: 500, // 500ms内重复点击只执行最后一次
		loading: true, // 显示加载状态
		showError: true // 显示错误提示
	})
}

/**
 * H5支付接口
 * API: https://api-test.xtv.media/api/pay/h5Pay
 * @param {Object} data 支付数据
 * @returns {Promise} 返回包含pay_url、jump_type等信息的响应
 */
export function h5Pay(data = {}) {
	return post('/pay/h5Pay', data, {
		debounce: true, // 启用防抖，防止重复提交
		delay: 500, // 500ms内重复点击只执行最后一次
		loading: true, // 显示加载状态
		showError: true // 显示错误提示
	})
}

/**
 * 获取公共参数模板
 * 注意：这里的参数应该从实际的用户会话或配置中获取，而不是硬编码
 * @param {Object} customParams 自定义参数
 * @returns {Object} 包含公共参数的对象
 */
export function getCommonParams(customParams = {}) {
	const defaultParams = {
		cid: 0,
		pid: 7,
		version: 20241129,
		ios: 1,
		rechargePackId: 14,
		token: "17568701225awlAnFI6L", // 应该从用户登录状态获取
		uid: 62485148, // 应该从用户登录状态获取
		// sign: "3326ca057f1c21d4934b6980240f534a1361cf1c241b3366dba01b88f9d737a8", // 应该动态生成
		timestamp: Math.floor(Date.now() / 1000), // 当前时间戳
		lang: "zh-cn",
		gmt: "GMT+08:00"
	}

	return {
		...defaultParams,
		...customParams
	}
}

/**
 * 便捷方法：获取金币数据（带公共参数）
 * @param {Object} customParams 自定义参数
 * @returns {Promise}
 */
export function fetchPayData(customParams = {}) {
	const params = getCommonParams(customParams)
	return getPayData(params)
}

/**
 * 便捷方法：获取订阅数据（带公共参数）
 * @param {Object} customParams 自定义参数
 * @returns {Promise}
 */
export function fetchSubscribeData(customParams = {}) {
	const params = getCommonParams(customParams)
	return getSubscribe(params)
}

/**
 * 便捷方法：获取iOS产品列表（带公共参数）
 * @param {Object} customParams 自定义参数
 * @returns {Promise}
 */
export function fetchIosProductList(customParams = {}) {
	const params = getCommonParams(customParams)
	return getIosProductList(params)
}

/**
 * 便捷方法：获取用户信息（带公共参数）
 * @param {Object} customParams 自定义参数
 * @returns {Promise}
 */
export function fetchUserInfo(customParams = {}) {
	const params = getCommonParams(customParams)
	return getUserInfo(params)
}

/**
 * 便捷方法：创建支付订单（带公共参数）
 * @param {Object} paymentData 支付相关数据
 * @param {Object} customParams 自定义公共参数
 * @returns {Promise}
 */
export function submitPayOrder(paymentData = {}, customParams = {}) {
	const commonParams = getCommonParams(customParams)
	const data = {
		...commonParams,
		...paymentData
	}
	return createPayOrder(data)
}

/**
 * 便捷方法：H5支付（带公共参数）
 * @param {Object} paymentData 支付相关数据
 * @param {Object} customParams 自定义公共参数
 * @returns {Promise}
 */
export function submitH5Pay(paymentData = {}, customParams = {}) {
	const commonParams = getCommonParams(customParams)
	const data = {
		...commonParams,
		...paymentData
	}
	return h5Pay(data)
}

// 导出所有方法
export default {
	getPayData,
	getSubscribe,
	getIosProductList,
	getUserInfo,
	createPayOrder,
	h5Pay,
	getCommonParams,
	fetchPayData,
	fetchSubscribeData,
	fetchIosProductList,
	fetchUserInfo,
	submitPayOrder,
	submitH5Pay,
	getSubscribeAddon,
	orderInfo,
	getArticleDetails
}